package models_sports

import (
	"fmt"
	"longmen/server/pkg/db/mysql/models"
)

type MatchCategory int

const (
	_ MatchCategory = iota
	Sport
	ESport
)

// Matches 比赛视频流地址通用表
type Matches struct {
	BaseMatches
	Pushurl1 string `json:"pushurl1"` // 普清流地址
	Pushurl2 string `json:"pushurl2"` // 中文高清流地址，可能为空
	Pushurl3 string `json:"pushurl3"` // 英文高清流地址，可能为空
}

type BaseMatches struct {
	MatchId     int           `json:"match_id" gorm:"primaryKey"` // 比赛 id
	Category    MatchCategory `json:"category"`                   // 类型 1 sport 2 esport
	SportId     int           `json:"sport_id"`                   // 1-足球，2-篮球
	MatchTime   int           `json:"match_time"`                 // 比赛时间
	MatchStatus int           `json:"match_status"`               // 比赛状态，详见接口文档
	Comp        string        `json:"comp"`                       // 赛事
	Home        string        `json:"home"`                       // 主队
	Away        string        `json:"away"`                       // 客队
}

// MatchesSuggest 推荐赛事专用结构
type MatchesSuggest struct {
	BaseMatches
	SuggestScore
	SuggestLive []SuggestLive `json:"lives"`
	TeamLog
}

type SuggestScore struct {
	Id        int `json:"score_match_id" gorm:"primaryKey;column:Id"`
	HomeScore int `json:"home_score"` // 主队常规时间比分(含补时)
	AwayScore int `json:"away_score"` // 客队常规时间比分
	HomeId    int `json:"home_id"`    // 主队id
	AwayId    int `json:"away_id"`    // 客队id
}

type TeamLog struct {
	HomeLog string `json:"home_log"`
	AwayLog string `json:"away_log"`
}

type TeamItem struct {
	TeamId int    `json:"team_id" gorm:"primaryKey;column:id"`
	Logo   string `json:"logo" gorm:"column:logo"`
}

type SuggestLive struct {
	Anchorid int    `json:"anchorid" gorm:"primaryKey"`          // 主播id  房间号
	Id       int    `json:"live_match_id" gorm:"column:matchid"` // 比赛编号
	LiveId   int64  `json:"liveid" gorm:"column:liveid"`         // 直播ID
	Logo     string `json:"logo"`                                // 主播头像
	Nickname string `json:"nickname"`                            // 主播昵称
}

func (m *Matches) TableName() string {
	return fmt.Sprintf("%smatches", models.Prefix)
}

type MatchesStatus struct {
	MatchId     int `json:"match_id" gorm:"primaryKey"` // 比赛 id
	MatchStatus int `json:"match_status"`               // 比赛状态，详见接口文档
}

type CompLabel struct {
	Id       int
	LabelPic string //标签图片
	Label    string //标签名称
	Comp     string //联赛名称
	SportId  int    //1足球 2篮球
	Serial   int    //顺序
}

func (m *CompLabel) TableName() string {
	return fmt.Sprintf("%scomp_label", models.Prefix)
}

func (m *MatchesStatus) TableName() string {
	return fmt.Sprintf("%smatches", models.Prefix)
}
func (m Matches) GetUpdateMatches(id, status int) MatchesStatus {
	data := MatchesStatus{}
	data.MatchId = id
	data.MatchStatus = status
	return data
}

/**
* @Author:admin
* @Description: 从redis中获取足球即时比赛信息
* @Param :
* @Return :
* @Date: 10:35 2022/6/29
 */
type FootBallMatchRedis struct {
	MatchId     int64                   `json:"match_id"`     //比赛Id
	MatchStatus int                     `json:"match_status"` //比赛状态  1.未开赛,2.上半场,3.中场,4.下半场,5.加时赛,6.加时赛(弃用),7.点球决战,8.完场,9.推迟,10.中断,11.腰斩,12.取消,13.待定
	HomeScore   FootBallMatchRedisScore `json:"home_score"`
	AwayScore   FootBallMatchRedisScore `json:"away_score"`
}

type FootBallMatchRedisScore struct {
	Score        int `json:"score"`         //比分
	HalfScore    int `json:"half_score"`    //半场比分
	RedCard      int `json:"red_card"`      //红牌数
	YellowCard   int `json:"yellow_card"`   //黄牌数
	CornerKick   int `json:"corner_kick"`   //角球数
	OtScore      int `json:"ot_score"`      //加时赛进球
	PenaltyScore int `json:"penalty_score"` //点球数
}

type MatchesSchedule struct {
	Id        int64
	MatchId   int64
	Away      string
	Home      string
	MatchTime int64
}

func (m *MatchesSchedule) TableName() string {
	return fmt.Sprintf("%smatches_schedule", models.Prefix)
}

type Match struct {
	MatchId           int32                `json:"match_id"`              //赛事ID
	Comp              string               `json:"comp"`                  //联赛名
	MatchTime         int64                `json:"match_time"`            //开赛具体时间
	Home              string               `json:"home"`                  //主队名称
	HomeLogo          string               `json:"home_logo"`             //主队图标
	HomeScore         int32                `json:"home_score"`            //主队当前比分
	Away              string               `json:"away"`                  //客队名称
	AwayLogo          string               `json:"away_logo"`             //客队图标
	AwayScore         int32                `json:"away_score"`            //客队当前比分
	MatchStatus       int32                `json:"match_status"`          //比赛状态, 1-进行,2-未开赛,3-完赛
	SportId           int32                `json:"sport_id"`              //赛事类型，1-足球，2-篮球
	HaveReservation   int32                `json:"have_reservation"`      // 是否有主播预约此场赛事 1->是,0->未有
	BHomeScore        []int32              `json:"b_home_score" gorm:"-"` //篮球主队牌数对象  grow 映射不能通过,请在生成文件中加入gorm:"-"
	BAwayScore        []int32              `json:"b_away_score" gorm:"-"` //篮球客队牌数对象  grow 映射不能通过,请在生成文件中加入gorm:"-"
	Favorite          int32                `json:"favorite"`              //是否收藏
	FavoriteQuantity  int32                `json:"favorite_quantity"`     //收藏数量
	FirstLetter       string               `json:"first_letter"`          //联赛首字母
	AnchorAvatar      string               `json:"anchor_avatar"`         //主播头像
	AnchorId          string               `json:"anchor_id"`             //主播ID
	CompShortZh       string               `json:"comp_short_zh"`         //联赛名简称
	RawMatchStatus    int32                `json:"raw_match_status"`      //比赛原始状态
	TimePlayed        int32                `json:"time_played"`           // 进行时间
	MatchDetailStatus string               `json:"match_detail_status"`   //比赛状态 转换后汉字
	HasVideoLink      int32                `json:"has_video_link"`        //是否有视频直播源
	ReservationAnchor []*ReservationAnchor `json:"reservation_anchor" gorm:"-"`
	AwayEn            string               `json:"away_en"`       //客队名称
	HomeEn            string               `json:"home_en"`       //客队名称
	CompShortEn       string               `json:"comp_short_en"` //联赛名
}

type ReservationAnchor struct {
	UserId       int64  `json:"user_id"`
	UserNickname string `json:"user_nickname"`
	UserAvatar   string `json:"user_avatar"`
	MatchId      int32  `json:"match_id"`
	LiveTime     int64  `json:"live_time"`
}
